/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

/**
 *
 * @author Jeppe
 */
public class Deck {
    private ArrayList <Kort> mineKort = new ArrayList<>();

    /**
     * Denne constructor laver som standard ét deck når der oprettes et objekt af klassen. Kortene ikke bliver blandet.
     */
    public Deck() {
        // Denne opretter ét(1)deck ved at kalde constructor'en og siger at den ikke skal blandes(false)
       this(1, false);
        //Bunke bunke=new Bunke[52];
    }

    /**
     * Constructor som definerer antallet af decks altså hvor mange sæt af 52
     * kort der i decks'ne om om de skal blandes (shuffle) For at oprette et
     * deck skal man altså i main f.eks. skrive Deck kortsæt = new Deck (1,
     * @param numDecks hvor mange decks vil du oprette med 52 kort i.
     * @param shuffle om man vil blande decket eller ej(true/false).
     */
    public Deck(int numDecks, boolean shuffle){
 
        // Kort index som fortæller hvor mange kort der er i deck'et.
        int c=0;

        // For hvert deck
        for (int d = 0; d < numDecks; d++) {

            //For hver suit
            for (int s = 0; s < 4; s++) {

                //For hvert nummer
                for (int n = 1; n <= 13; n++) {

                    //Tilføjer et nyt kort og dermed et nyt deck.
                    Kort næsteKort = new Kort(Suit.values()[s], n);
                    mineKort.add(c, næsteKort);
                    c++;

                }

            }
        }
        //Shuffle/bland kortene
        if (shuffle) {
            Random ran = new Random();
            this.shuffle(ran.nextInt(9)+1);
        }

    }
    //Shuffle metoden
    public void shuffle(int antalBland) {
        for (int i = 0; i < antalBland; i++) {
            Collections.shuffle(mineKort);
        }

    }
    //Giver næste kort fra øverst i deck'et
    //return det givne kort.
    public Kort trækØversteKort() {
        Kort top = this.mineKort.get(this.mineKort.size()-1);
        this.mineKort.remove(this.mineKort.size()-1);
        return top;
    }
    public int getAntalKortIDeck(){
        return this.mineKort.size();
    }
    public void printDeck(int numToPrint) {
        for (int c = 0; c < numToPrint; c++) {
            System.out.printf("% 3d/%d %s\n", c + 1, this.mineKort.size(),
                    this.mineKort.get(c).toString());
        }
        System.out.printf("\t\t[%d other]\n", this.mineKort.size() - numToPrint);
    }
    public void fjernKortFraBunke(Kort etKort){
        this.mineKort.add(etKort);
    }
}
